package com.xinggq.common.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * ID生成器配置属性类
 * 
 * <p>支持通过配置文件配置ID生成器的参数</p>
 * 
 * <p>配置示例：</p>
 * <pre>
 * # application.yml
 * id-generator:
 *   enabled: true
 *   worker-id: 1      # 工作机器ID，取值范围 0-31
 *   datacenter-id: 1  # 数据中心ID，取值范围 0-31
 * </pre>
 * 
 * <p><strong>重要配置说明：</strong></p>
 * <ul>
 *   <li><strong>分布式唯一性：</strong>在分布式环境中，每个节点的 workerId 和 datacenterId 组合必须唯一</li>
 *   <li><strong>取值范围：</strong>workerId 和 datacenterId 的取值范围都是 0-31（5位二进制）</li>
 *   <li><strong>配置冲突后果：</strong>如果多个节点使用相同的 workerId 和 datacenterId 组合，可能导致生成重复的ID</li>
 *   <li><strong>生产环境建议：</strong>建议通过环境变量或配置中心动态分配这些ID，避免硬编码</li>
 * </ul>
 * 
 * <p><strong>集群配置示例：</strong></p>
 * <pre>
 * # 节点1
 * id-generator:
 *   worker-id: 1
 *   datacenter-id: 1
 * 
 * # 节点2  
 * id-generator:
 *   worker-id: 2
 *   datacenter-id: 1
 * 
 * # 不同数据中心的节点
 * id-generator:
 *   worker-id: 1
 *   datacenter-id: 2
 * </pre>
 * 
 * @param enabled 是否启用ID生成器，默认为 true
 * @param workerId 工作机器ID，取值范围 0-31，在同一数据中心内必须唯一
 * @param datacenterId 数据中心ID，取值范围 0-31，用于区分不同的数据中心或机房
 * 
 * @author xinggq
 * @since 1.0.0
 */
@ConfigurationProperties(prefix = "id-generator")
public record IdGeneratorProperties(
    /**
     * 是否启用ID生成器
     * <p>默认值：true</p>
     */
    boolean enabled,
    
    /**
     * 工作机器ID
     * <p>取值范围：0-31（5位二进制）</p>
     * <p><strong>重要：</strong>在同一数据中心内，每个节点的 workerId 必须唯一</p>
     * <p>默认值：1</p>
     */
    long workerId,
    
    /**
     * 数据中心ID  
     * <p>取值范围：0-31（5位二进制）</p>
     * <p><strong>用途：</strong>用于区分不同的数据中心、机房或可用区</p>
     * <p>默认值：1</p>
     */
    long datacenterId
) {
    
    /**
     * 默认构造器，提供默认值
     */
    public IdGeneratorProperties() {
        this(true, 1L, 1L);
    }
}